﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace QuanLyNhaHang
{
    public partial class QLMonAn : Form
    {
        private string old_ma = null;
        private DataTable dt_nvl,dt_nvlmonan;        
        public QLMonAn()
        {
            InitializeComponent();
        }

        private void buttonThoat_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void buttonReset_Click(object sender, EventArgs e)
        {
            resetText();
        }

        private void resetText()
        {
            textBoxMaMonAn.ResetText();
            textBoxGiaTien.ResetText();
            textBoxTenMonAn.ResetText();
            dt_nvl = BUSNguyenVatLieu.getAll();
            listBoxDSNVL.DataSource = dt_nvl;
            dt_nvlmonan = null;
            listBoxDSNVLMonAn.DataSource = dt_nvlmonan;
        }

        private void reloadDatagrid()
        {
            dataGridViewDSMonAn.DataSource = BUSMonAn.getAll();
        }

        private void buttonThem_Click(object sender, EventArgs e)
        {
            add();
        }

        private void add()
        {
            var obj = new DTOMonAn();
            old_ma = null;
            if (check(ref obj))
            {
                if (BUSMonAn.add(obj,dt_nvlmonan) > 0)
                {
                    MessageBox.Show("Thêm mới thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    reloadDatagrid();
                    resetText();
                }
                else
                {
                    MessageBox.Show("Thêm mới thất bại", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }            
        }

        private bool check(ref DTOMonAn obj)
        {
            StringBuilder str = new StringBuilder();

            if (string.IsNullOrEmpty(textBoxMaMonAn.Text.Trim()))
            {
                str.AppendLine("Mã món ăn không được bỏ trống.");
            }

            if (string.IsNullOrEmpty(textBoxTenMonAn.Text.Trim()))
            {
                str.AppendLine("Tên món ăn không được bỏ trống.");
            }

            if (string.IsNullOrEmpty(textBoxGiaTien.Text.Trim()))
            {
                str.AppendLine("Giá tiền không được bỏ trống.");
            }
            else
            {
                int giatien;
                int.TryParse(textBoxGiaTien.Text.Trim(),out giatien);
                if (giatien < 1000 || giatien > 10000000)
                {
                    str.AppendLine("Giá tiền phải nằm trong khoảng 1000 và 10 triệu");
                }
            }

            obj.MaMonAn = textBoxMaMonAn.Text.Trim();            
            if (BUSMonAn.checkDuplicate(obj, old_ma))
            {
                str.AppendLine("Mã không được trùng với mã đã có trong danh sách.");
            }

            if (str.Length > 0)
            {
                MessageBox.Show(str.ToString(), "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }

            obj.MaNV = int.Parse(comboBoxMaNV.SelectedValue.ToString());
            obj.MaQG = comboBoxMaQG.SelectedValue.ToString();
            obj.TenMonAn = textBoxTenMonAn.Text.Trim();
            obj.GiaTien = float.Parse(textBoxGiaTien.Text.Trim());
                        
            return true;
        }

        private void QLMonAn_Load(object sender, EventArgs e)
        {
            comboBoxMaQG.DataSource = BUSQuocGia.LayDSQG();
            comboBoxMaQG.DisplayMember = "TenQG";
            comboBoxMaQG.ValueMember = "MaQG";
            
            comboBoxMaNV.DataSource = BUSNhanVien.LayDSNhanVien(false);
            comboBoxMaNV.DisplayMember = "Name";
            comboBoxMaNV.ValueMember = "MaNV";

            dt_nvl = BUSNguyenVatLieu.getAll();
            listBoxDSNVL.DataSource = dt_nvl;
            listBoxDSNVL.DisplayMember = "TenNVL";
            listBoxDSNVL.ValueMember = "MaNVL";

            dataGridViewDSMonAn.DataSource = BUSMonAn.getAll();
        }

        private void buttonXoa_Click(object sender, EventArgs e)
        {
            if (dataGridViewDSMonAn.SelectedRows.Count > 0)
            {
                BUSMonAn.del(new DTOMonAn()
                {
                    MaMonAn = (string)dataGridViewDSMonAn.CurrentRow.Cells[0].Value
                });
                reloadDatagrid();
            }
        }

        private void buttonSua_Click(object sender, EventArgs e)
        {
            var obj = new DTOMonAn();
            if (check(ref obj))
            {
                if (BUSMonAn.edit(obj, old_ma) > 0)
                {
                    MessageBox.Show("Sửa dữ liệu thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    reloadDatagrid();
                    resetText();
                }
                else
                {
                    MessageBox.Show("Sửa dữ liệu thất bại", "Thông báo lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            buttonSua.Enabled = false;
        }

        private void dataGridViewDSMonAn_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var row = dataGridViewDSMonAn.CurrentRow;
            textBoxMaMonAn.Text = old_ma = row.Cells["MaMonAn"].Value.ToString();
            textBoxGiaTien.Text = row.Cells["GiaTien"].Value.ToString();
            textBoxTenMonAn.Text = row.Cells["TenMonAn"].Value.ToString();
            comboBoxMaNV.SelectedValue = row.Cells["MaNV"].Value;
            comboBoxMaQG.SelectedValue = row.Cells["MaQG"].Value;

            dt_nvlmonan = BUSChiTietMonAn.getAll(old_ma);
            listBoxDSNVLMonAn.DataSource = dt_nvlmonan;
            listBoxDSNVLMonAn.DisplayMember = "TenNVL";
            listBoxDSNVLMonAn.ValueMember = "MaNVL";

            /*foreach(DataRow dr in dt_nvlmonan.Rows){
                for (int i = 0; i < dt_nvl.Rows.Count; i++)
                {
                    if (dt_nvl.Rows[i]["MaNVL"].ToString() != dr["MaNVL"].ToString())
                    {
                        dt_nvl.Rows[i].Delete();
                    }
                }                
            }
            dt_nvl.AcceptChanges();
             * */
            dt_nvl = BUSNguyenVatLieu.getAll();
            listBoxDSNVL.DataSource = dt_nvl;
            listBoxDSNVL.DisplayMember = "TenNVL";
            listBoxDSNVL.ValueMember = "MaNVL";
            
            buttonSua.Enabled = true;
        }

        private void buttonSearch_Click(object sender, EventArgs e)
        {
            search();
        }

        private void search()
        {
            DataTable dt = BUSMonAn.getAll(textBoxSMaMonAn.Text, textBoxSTenMonAn.Text);
            dataGridViewDSMonAn.DataSource = dt;
        }
        
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            if (listBoxDSNVL.SelectedIndex >= 0)
            {
                if (dt_nvlmonan == null)
                {
                    dt_nvlmonan = dt_nvl.Clone();
                }

                dt_nvlmonan.PrimaryKey = new DataColumn[] { dt_nvlmonan.Columns["MaNVL"] };
                var d = dt_nvlmonan.Rows.Contains(dt_nvl.Rows[listBoxDSNVL.SelectedIndex]["MaNVL"]);
                if (!d)
                {
                    DataRow dr = dt_nvlmonan.NewRow();
                    dr["MaNVL"] = dt_nvl.Rows[listBoxDSNVL.SelectedIndex]["MaNVL"];
                    dr["TenNVL"] = dt_nvl.Rows[listBoxDSNVL.SelectedIndex]["TenNVL"];
                    dr["MaLoai"] = dt_nvl.Rows[listBoxDSNVL.SelectedIndex]["MaLoai"];
                    dt_nvlmonan.Rows.Add(dr);
                    dt_nvlmonan.AcceptChanges();
                }

                listBoxDSNVLMonAn.DataSource = dt_nvlmonan;
                listBoxDSNVLMonAn.DisplayMember = "TenNVL";
                listBoxDSNVLMonAn.ValueMember = "MaNVL";

                dt_nvl.Rows.RemoveAt(listBoxDSNVL.SelectedIndex);
            }
        }

        private void buttonRemove_Click(object sender, EventArgs e)
        {
            if (listBoxDSNVLMonAn.SelectedIndex >= 0)
            {
                DataRow dr = dt_nvl.NewRow();
                dr["MaNVL"] = dt_nvlmonan.Rows[listBoxDSNVLMonAn.SelectedIndex]["MaNVL"];
                dr["TenNVL"] = dt_nvlmonan.Rows[listBoxDSNVLMonAn.SelectedIndex]["TenNVL"];
                dr["MaLoai"] = dt_nvlmonan.Rows[listBoxDSNVLMonAn.SelectedIndex]["MaLoai"];
                dt_nvl.Rows.Add(dr);
                dt_nvl.AcceptChanges();

                dt_nvlmonan.Rows.RemoveAt(listBoxDSNVLMonAn.SelectedIndex);
            }
        }

        private void textBoxSMaMonAn_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                search();
            }
        }

        private void textBoxSTenMonAn_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                search();
            }
        }

        private void textBoxGiaTien_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                add();
            }
        }

        private void textBoxMaMonAn_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                add();
            }
        }

        private void textBoxTenMonAn_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                add();
            }
        }
    }
}
